package tech.aistar.day11;

import java.sql.Timestamp;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 本类用来演示: Callable方式
 *
 * @author: success
 * @date: 2022/8/2 8:37 上午
 */
public class CallableDemo implements Callable<Integer> {
    //call方法和run方法的区别
    //call方法可以有返回值
    //call方法的签名上可以抛出异常列表
    @Override
    public Integer call() throws Exception {
        Thread.sleep(3000);
        return 100;
    }
}
class CallableDemoTest{
    public static void main(String[] args) {
        Callable<Integer> c = new CallableDemo();
        //构建FutureTask对象
        FutureTask<Integer> task = new FutureTask<>(c);
        //创建线程对象
        Thread t = new Thread(task);
        //启动线程
        t.start();

        //获取线程执行的结果
        try {
            //get()可能发生阻塞 - 必须要拿到线程执行的结果之后,才会继续向下执行.
            //Integer result = task.get();

            //main线程
            //System.out.println("main-result:"+result);

            System.out.println("main-result:"+task.get());

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}